export default {
	namespaced: true,
	// 模块的状态，用于存储应用程序中的相关数据
	state: () => ({
		//尝试从本地存储中获取地址信息，并将其解析为JSON对象
		// 如果获取失败（本地存储中不存在或格式不正确），则使用一个空对象作为默认值
		address: JSON.parse(uni.getStorageSync('address') || '{}'),
		// 尝试从本地存储中获取token信息，如果不存在则使用空字符串作为默认值
		token: uni.getStorageSync('token') || '',
		// 尝试从本地存储中获取用户信息，并将其解析为JSON对象
		// 如果获取失败（本地存储中不存在或格式不正确），则使用一个空对象作为默认值
		userInfo: JSON.parse(uni.getStorageSync('userInfo') || '{}'),
		// 用于存储页面重定向相关的数据，初始值为null
		redirectInfo: null //页面重定向数据
	}),
	// 定义一系列的mutation函数，用于同步修改模块的状态
	mutations: {
		// 更新地址信息的mutation函数
		updateAddress(state, address) {
			// 将传入的新地址信息赋值给模块状态中的address属性
			state.address = address
			// 调用本模块内的另一个mutation函数saveAddressToStorage，
			// 用于将更新后的地址信息保存到本地存储中
			this.commit('m_user/saveAddressToStorage')
		},
		// 将地址信息保存到本地存储的mutation函数
		saveAddressToStorage(state) {
			// 使用uni.setStorageSync方法将模块状态中的地址信息
			// 转换为JSON字符串后保存到本地存储中，键名为'address'
			uni.setStorageSync('address', JSON.stringify(state.address))
		},
		// 更新用户信息的mutation函数
		updateUserInfo(state, user) {
			// 将传入的新用户信息赋值给模块状态中的userInfo属性
			state.userInfo = user
			// 调用本模块内的另一个mutation函数saveUserInfoToStorage，
			// 用于将更新后的用户信息保存到本地存储中
			this.commit('m_user/saveUserInfoToStorage')
		},
		// 将用户信息保存到本地存储的mutation函数
		saveUserInfoToStorage(state) {
			// 使用uni.setStorageSync方法将模块状态中的用户信息
			// 转换为JSON字符串后保存到本地存储中，键名为'userInfo'
			uni.setStorageSync('userInfo', JSON.stringify(state.userInfo))
		},
		// 更新token信息的mutation函数
		updateToken(state, token) {
			// 将传入的新token信息赋值给模块状态中的token属性
			state.token = token
			// 调用本模块内的另一个mutation函数saveTokenToStorage，
			// 用于将更新后的token信息保存到本地存储中
			this.commit('m_user/saveTokenToStorage')
		},
		// 将token信息保存到本地存储的mutation函数
		saveTokenToStorage(state) {
			// 使用uni.setStorageSync方法将模块状态中的token信息
			// 转换为JSON字符串后保存到本地存储中，键名为'token'
			uni.setStorageSync('token', JSON.stringify(state.token))
		},
		// 更新页面重定向信息的mutation函数
		updateRedirectInfo(state, info) {
			// 将传入的新的重定向信息赋值给模块状态中的redirectInfo属性
			state.redirectInfo = info
		}
	},
	// 定义一系列的getter函数，用于从模块的状态中获取派生数据
	getters: {
		// 根据地址信息生成一个完整地址字符串的getter函数
		addressStr(state) {
			// 如果地址信息中的省份名称不存在，则返回空字符串
			if (!state.address.provinceName) return ''
			// 否则，将省份名称、城市名称、区县名称和详细地址信息拼接成一个完整的地址字符串并返回
			return state.address.provinceName + state.address.cityName + state.address.countyName + state.address
				.detailInfo
		}
	}
}